Architectural performance monitoring support through features such as architectural performance counters and last branch records allows an end-user to observe detailed information about currently executing software in an architecturally-defined manner (e.g., reading MSRs, or by streaming this information to memory). Binary translation systems take existing code and transform it in some way to a new set of binary code fragments, which are executed in place of the original code. In terms of an architectural performance counter, the new code fragments may bear no resemblance to the original code. For example, the number of instructions and/or branches in the translated code stream may be different from the original code stream or the addresses of control flow instructions and/or branches in the translated code may be different from the original code. Therefore, a binary translation system may create incompatibility between certain features (e.g., instructions retired, branch instructions retired, or branch misses retired) and an end-user. A binary translation system may also pose a security risk to itself by allowing an end-user to monitor architectural performance counter facilities and extract information about the binary translation system, for example, allowing addresses of translated code to be discovered may create opportunities for malicious attacks which may exploit a binary translation system's translation cache.